public class code1 {

    // 牛客 top101 最大滑动窗口

    /**
     * 代码中的类名、方法名、参数名已经指定，请勿修改，直接返回方法规定的值即可
     *
     *
     * @param num int整型一维数组
     * @param size int整型
     * @return int整型ArrayList
     */
    public ArrayList<Integer> maxInWindows (int[] num, int size) {
        // write code here
        // 首先定义两个指针，指向这里的数组
        int p1 = 0;
        int p2 = 0;
        // 创建出一个顺序表用来存储这里查找到的最大值信息
        ArrayList<Integer> list = new ArrayList<>();

        // 首先判断这里的数组异常情况
        if(num.length < size || size == 0) {
            // 需要注意的是，这里的题目要求返回的是一个 [] 而不是 null
            return list;
        }

        // 这里要处理数组最后位置的窗口大小
        for(int i = 0; i < num.length-size+1 ; i++) {
            // 创建出一个最大值，每次循环都让这个最大值进行刷新
            int max = 0;
            // 通过两个指针，让一个指针在 size 范围内找到最大值
            // 这里还需要将 size 值进行处理，确保 size 的值和 数组下标是对齐的
            while(p2 < size+p1) {
                if(max < num[p2]) {
                    max = num[p2];
                }
                p2++;
            }
            // 当一组 size 判断完毕后，将 p1 指针向前移动一个位置
            // 在让 p2 指针同步到 p1 指针的位置
            p1++;
            p2 = p1;
            // 并且将最大的滑动窗口添加到顺序表中
            list.add(max);
        }
        return list;
    }
}
